home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_jade.idb / usr / freeware / include / sp / lib / Param.h.z / Param.h
C/C++ Source or Header  |  1999-07-21  |  4KB  |  214 lines

  1. // Copyright (c) 1994 James Clark
  2. // See the file COPYING for copying permission.
  3.  
  4. #ifndef Param_INCLUDED
  5. #define Param_INCLUDED 1
  6. #ifdef __GNUG__
  7. #pragma interface
  8. #endif
  9.  
  10. #include "Boolean.h"
  11. #include "ContentToken.h"
  12. #include "StringC.h"
  13. #include "Location.h"
  14. #include "MessageArg.h"
  15. #include "Mode.h"
  16. #include "NameToken.h"
  17. #include "Owner.h"
  18. #include "Ptr.h"
  19. #include "Syntax.h"
  20. #include "Text.h"
  21. #include "Vector.h"
  22.  
  23. // This describes a markup declaration parameter.
  24.  
  25. #ifdef SP_NAMESPACE
  26. namespace SP_NAMESPACE {
  27. #endif
  28.  
  29. class ElementType;
  30.  
  31. class Param {
  32. public:
  33.   Param() { }
  34.   typedef unsigned char Type;
  35.   enum {
  36.     invalid,
  37.     dso,
  38.     mdc,
  39.     minus,
  40.     pero,
  41.     inclusions,
  42.     exclusions,
  43.     nameGroup,
  44.     nameTokenGroup,
  45.     modelGroup,
  46.     number,
  47.     minimumLiteral,
  48.     attributeValueLiteral,
  49.     tokenizedAttributeValueLiteral,
  50.     systemIdentifier,
  51.     paramLiteral,
  52.     name,
  53.     entityName,
  54.     paramEntityName,
  55.     attributeValue,
  56.     reservedName,        // Syntax::ReservedName is added to this
  57.     // this is a reserved name preceded by the RNI delimiter
  58.     indicatedReservedName = reservedName + Syntax::nNames
  59.     };
  60.   enum { nTypes = indicatedReservedName + Syntax::nNames };
  61.   Type type;
  62.   Location startLocation;
  63.   Text literalText;
  64.   Boolean lita;
  65.   Owner<ModelGroup> modelGroupPtr;
  66.   Vector<NameToken> nameTokenVector;
  67.   StringC token;        // name nameToken; with substitution
  68.   Vector<const ElementType *> elementVector;
  69. private:
  70.   Param(const Param &);        // undefined
  71.   void operator=(const Param &); // undefined
  72. };
  73.  
  74. class AllowedParams {
  75. public:
  76.   AllowedParams(Param::Type,
  77.         Param::Type = Param::invalid,
  78.         Param::Type = Param::invalid,
  79.         Param::Type = Param::invalid,
  80.         Param::Type = Param::invalid,
  81.         Param::Type = Param::invalid,
  82.         Param::Type = Param::invalid,
  83.         Param::Type = Param::invalid,
  84.         Param::Type = Param::invalid,
  85.         Param::Type = Param::invalid);
  86.   AllowedParams(const Param::Type *types, int nTypes);
  87.   Mode mainMode() const;
  88.   Boolean mdc() const;
  89.   Boolean rni() const;
  90.   Boolean dso() const;
  91.   Boolean inclusions() const;
  92.   Boolean exclusions() const;
  93.   Boolean reservedName(Syntax::ReservedName) const;
  94.   Param::Type group() const;
  95.   Param::Type nameStart() const;
  96.   Param::Type digit() const;
  97.   Param::Type nmchar() const;
  98.   Param::Type literal() const;
  99. private:
  100.   void init();
  101.   void allow(Param::Type);
  102.   PackedBoolean mdc_;
  103.   PackedBoolean rni_;
  104.   PackedBoolean dso_;
  105.   PackedBoolean inclusions_;
  106.   PackedBoolean exclusions_;
  107.   // invalid, minus, pero
  108.   Param::Type extraDelimiter_;
  109.   // invalid, nameGroup, nameTokenGroup, modelGroup
  110.   Param::Type group_;
  111.   // invalid, reservedName, name, entityName, paramEntityName, attributeValue
  112.   Param::Type nameStart_;
  113.   // invalid, number, attributeValue
  114.   Param::Type digit_;
  115.   // invalid, attributeValue
  116.   Param::Type nmchar_; // LCNMCHAR or UCNMCHAR
  117.   // invalid, minimumLiteral, systemIdentifier, paramLiteral,
  118.   // (tokenized)attributeValueLiteral
  119.   Param::Type literal_;
  120.   PackedBoolean reservedNames_[Syntax::nNames];
  121.   Mode mainMode_;        // mdMode mdMinusMode mdPeroMode
  122. };
  123.  
  124. class MessageBuilder;
  125.  
  126. class AllowedParamsMessageArg : public MessageArg {
  127. public:
  128.   AllowedParamsMessageArg(const AllowedParams &allow,
  129.               const ConstPtr<Syntax> &syntax);
  130.   MessageArg *copy() const;
  131.   void append(MessageBuilder &) const;
  132. private:
  133.   AllowedParams allow_;
  134.   ConstPtr<Syntax> syntax_;
  135. };
  136.  
  137. inline
  138. Mode AllowedParams::mainMode() const
  139. {
  140.   return mainMode_;
  141. }
  142.  
  143. inline
  144. Boolean AllowedParams::mdc() const
  145. {
  146.   return mdc_;
  147. }
  148.  
  149. inline
  150. Boolean AllowedParams::rni() const
  151. {
  152.   return rni_;
  153. }
  154.  
  155. inline
  156. Boolean AllowedParams::dso() const
  157. {
  158.   return dso_;
  159. }
  160.  
  161. inline
  162. Boolean AllowedParams::inclusions() const
  163. {
  164.   return inclusions_;
  165. }
  166.  
  167. inline
  168. Boolean AllowedParams::exclusions() const
  169. {
  170.   return exclusions_;
  171. }
  172.  
  173. inline
  174. Boolean AllowedParams::reservedName(Syntax::ReservedName i) const
  175. {
  176.   return reservedNames_[i];
  177. }
  178.  
  179. inline
  180. Param::Type AllowedParams::group() const
  181. {
  182.   return group_;
  183. }
  184.  
  185. inline
  186. Param::Type AllowedParams::nameStart() const
  187. {
  188.   return nameStart_;
  189. }
  190.  
  191. inline
  192. Param::Type AllowedParams::digit() const
  193. {
  194.   return digit_;
  195. }
  196.  
  197. inline
  198. Param::Type AllowedParams::nmchar() const
  199. {
  200.   return nmchar_;
  201. }
  202.  
  203. inline
  204. Param::Type AllowedParams::literal() const
  205. {
  206.   return literal_;
  207. }
  208.  
  209. #ifdef SP_NAMESPACE
  210. }
  211. #endif
  212.  
  213. #endif /* not Param_INCLUDED */
  214.